/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.sql.Date;
import java.sql.PreparedStatement;
import model.Enseignant;
import model.Etudiant;
import model.Personne;
import dao.DAOPersonne;

/**
 *
 *
 * @author Paul
 */
public class DAOEnseignant  {

    public void create(Enseignant obj) {
        String query = "INSERT INTO `personne`( `nom`, `prenom`, `dateNaissance`, `typeUtilisateur`, `login`, `password`) VALUES (?,?,?,?,?,?);";
         int nb = 0;
        int autoIncKeyFromApi = -1;
        PreparedStatement ps = null;
        /**
         * lancement de la connexion à la bd et de la requete *
         */
         try {
            Connection conn = DBConnection.getConnection();//Creation de la connexion
            ps = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);//preparation de la requete

            /**
             * remplacement des points d'interogation dans la query par les
             * variables*
             */
            ps.setString(1, obj.getNom());
            ps.setString(2, obj.getPrenom());
            ps.setDate(3, obj.getDatenaissance());
            ps.setString(4, obj.getTypeUtilisateur());
            ps.setString(5, obj.getLogin());
            ps.setString(6, obj.getMdp());
            System.out.println(ps);
            nb = ps.executeUpdate();//lancement de la requête
            ResultSet rs = ps.getGeneratedKeys();//recupération du résultat
            if (rs.next()) {//récuperation de l'id 
                autoIncKeyFromApi = rs.getInt(1);
                System.out.println(autoIncKeyFromApi);
                String query2 = "INSERT INTO `enseignant`(`id_personne`) VALUES (" + autoIncKeyFromApi + ");";
                System.out.println(query2);
                ps = conn.prepareStatement(query2, Statement.RETURN_GENERATED_KEYS);//preparation de la requete
                nb = ps.executeUpdate();
                System.out.println(nb);
            }

        } catch (SQLException e) {
            e.printStackTrace();

        }
    }
    
    public Enseignant rechercheProf(String login, String mdp) throws SQLException {

            PreparedStatement st = null;
            Enseignant p=null;
            try {
                Connection conn = DBConnection.getConnection();
                String query = "select p.login,p.password,p.nom,p.prenom,e.id_enseignant,e.id_personne,p.typeUtilisateur from personne p,enseignant e where p.login='"+login+"' and p.password='"+mdp+"' and p.id_personne=e.id_personne;";
                st = conn.prepareStatement(query);
                ResultSet res = st.executeQuery(query);
                if(res.next()){
                    String log = res.getString("login");
                    String password = res.getString("password");
                   String nom= res.getString("nom");
                   String prenom=res.getString("prenom");
                   int idp=res.getInt("id_personne");
                   int ide=res.getInt("id_enseignant");
                   String type=res.getString("typeUtilisateur");
                   java.sql.Date d =null;
                    p = new Enseignant(ide,idp,nom,prenom,d,type,log,password);
                }
                }catch(SQLException e){
                    e.printStackTrace();
            }
           
            return p;
             } 
    
    public void update(int idEnseignant) {
        String query2 = "SELECT id_personne FROM enseignant WHERE id_enseignant = "+idEnseignant+"";
        int nb = 0;
        boolean del = false;
         Statement st = null;
         int idPersonne = 0;
        try {
            Connection conn = DBConnection.getConnection();
            st = conn.createStatement();
                 
        /** remplacement des points d'interogation dans la query par les variables**/  
            
            ResultSet res = st.executeQuery(query2);//lancement de la requête
            while (res.next()) {
                 idPersonne = res.getInt("id_personne");
            }
            Personne p = new Personne(idPersonne);
           DAOPersonne x = new DAOPersonne();
           x.update(p);
            if(nb >= 1) {
                del = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public boolean delete(Personne obj) {
        String query = "DELETE FROM `enseignant` WHERE `id_personne`= ?";
        boolean del = false;
        Integer nb = 0;
        int autoIncKeyFromApi = -1;
        PreparedStatement ps = null;
        try {
            Connection conn = DBConnection.getConnection();//Creation de la connexion
            ps = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);//preparation de la requete
            System.out.println(ps);
            /**
             * remplacement des points d'interogation dans la query par les
             * variables*
             */
           ps.setObject(1, obj.getId());
          System.out.println(obj.getId());
           // System.out.println(obj.getId());
            nb = ps.executeUpdate();//lancement de la requête
            ResultSet rs = ps.getGeneratedKeys();//recupération du résultat
            if (rs.next()) {//récuperation de l'id 
                autoIncKeyFromApi = rs.getInt(1);
                System.out.println(autoIncKeyFromApi);
                System.out.println(nb);
                System.out.println("Delete OK");
            }
            if (nb >= 1) {
                del = true;
            }
            return del;

        } catch (SQLException e) {
            e.printStackTrace();

        }
        return false;
    }

  

    
    
    
    
//---------------------------------------------------------private method--------------------------------------------------------------------//
  
       private ArrayList<Enseignant> findGeneral(String requete) {
        ArrayList<Enseignant> enseignants = new ArrayList<Enseignant>();
        Statement st = null;
        Enseignant enseignant = null;

        try {
            Connection conn = DBConnection.getConnection();
            st = conn.createStatement();
            ResultSet res = st.executeQuery(requete);
            while (res.next()) {
                enseignant = createObject(res);
                enseignants.add(enseignant);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return enseignants;
    }

    private Enseignant createObject(ResultSet res) {
        Enseignant enseignant = null;
        try {
            Integer id = res.getInt("id_personne");
            String nom = res.getString("nom");
            String prenom = null;
            Date datenaissance = null;
            String type = null;
            String login=null;
            enseignant = new Enseignant(id, nom, prenom, datenaissance, type,login, "");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return enseignant;
    }   

}
